package com.lvy.hczn.front.business.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lvy.hczn.front.business.dto.SortTaskDetailDto;
import com.lvy.hczn.front.system.domain.business.*;
import com.lvy.hczn.front.system.domain.business.dto.ParcelDto;
import com.lvy.hczn.front.system.domain.business.dto.TransferParcelDto;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface SortTaskDetailService extends IService<SortTaskDetail> {

    /**
     * 根据销售单初始化分拣数据
     *
     * @param saleOrder
     * @param list
     * @return
     * @author yw
     * @date 2022-04-14 20:57:16
     */
    void initTaskDetailBySaleOrder(SaleOrder saleOrder, List<SaleOrderDetail> list, SortTask sortTask, boolean beforeSort);

    /**
     * 根据调拨单初始化分拣数据
     *
     * @param transferOrder
     * @param list
     * @return
     * @author yw
     * @date 2022-04-14 20:57:16
     */
    void initTaskDetailByTransfer(TransferOrder transferOrder, List<TransferOrderDetail> list, SortTask sortTask);

    void initTaskDetailByTransferParcel(TransferOrder transferOrder, List<TransferParcelDto> list, SortTask sortTask);

    /**
     * 根据配送区域生成分拣任务
     *
     * @return
     * @author yw
     * @date 2022-04-14 21:30:46
     */
    void generateSortTaskByDeliveryArea(List<SortTaskDetail> list, SortTask sortTask);

    /**
     * 根据分拣人员账号查询需分拣的原料列表
     *
     * @param clientId
     * @param status
     * @return
     * @author yw
     * @date 2022-04-15 19:56:35
     */
    List<String> selectSortSpuIdByClient(String clientId, String status) throws Exception;

    /**
     * 获取分拣任务列表
     *
     * @param clientId
     * @param status
     * @param spuId
     * @param bigProduct
     * @return
     * @author yw
     * @date 2022-04-15 19:56:35
     */
    List<SortTaskDetail> selectByClient(String clientId, String status, String spuId, String batchCode, Integer bigProduct) throws Exception;

    /**
     * 累加已分拣总重量
     *
     * @param sortTaskDetail
     * @param boxCode
     * @param sortIds
     * @return
     * @author yw
     * @date 2022-04-18 20:16:55
     */
    Map<String, Object> updateSortWeightById(HttpServletRequest request, SortTaskDetail sortTaskDetail, String boxCode, List<String> sortIds) throws Exception;

    /**
     * @Description 地平仓分拣，修改库存
     * @Param
     * @Author yw
     * @Date 2024/6/20 11:26
     * @Return
     **/
    Map<String, Object> updateSortWeightByIdOfLarge(HttpServletRequest request,SortTaskDetailDto sortTaskDetail) throws Exception;

    /**
     * 初始化销售分拣出库单
     *
     * @param sortTaskDetail
     * @param goodsBoxDetail
     * @param sortWeight
     * @param sortTaskDetailBoxes
     * @param sortTask
     */
    void initWarehousingEntry(SortTaskDetail sortTaskDetail, GoodsBoxDetail goodsBoxDetail, BigDecimal sortWeight, List<WarehousingEntry> sortTaskDetailBoxes, SortTask sortTask, int quantity);

    /**
     * 根据ID更改状态（如缺货），且校验有没分拣完成，分拣完成更改父表信息
     *
     * @param sortTaskDetail
     * @return
     * @author yw
     * @date 2022-04-18 20:16:55
     */
    void updateStatusById(SortTaskDetail sortTaskDetail, SortTask sortTask) throws Exception;

    /**
     * 销售配送分拣完成通知，发送到平台
     *
     * @param sortTaskDetail
     * @param status
     * @return void
     * @author yw
     * @date 2023-06-27 09:15:15
     */
    void sendSortDoneToPlatform(SortTaskDetail sortTaskDetail, String status, boolean beforeSort);

    /**
     * 调拨出库分拣完成通知
     *
     * @param sortTaskDetail
     * @param status
     * @return void
     * @author yw
     * @date 2023-08-25 19:54:00
     */
    void sendSortTransferDoneToPlatform(SortTaskDetail sortTaskDetail, String status, SortTask sortTask);

    /**
     * @Description 订单分拣完成打印小票
     * @Param
     * @Author yw
     * @Date 2024/8/26 15:16
     * @Return
     **/
    void printReceipt(SortTaskDetail sortTaskDetail);
}